package org.zachary.imitation.raft.util.timer;

import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * 定时任务调度器的抽象接口
 */
public interface Timer {

	/**
	 * 创建一个新的超时对象
	 *
	 * @param task  超时对象中的定时任务
	 * @param delay 延迟多长时间执行这个定时任务
	 * @param unit  延迟的时间单位i
	 * @return Timeout 的超时对象
	 */
	Timeout newTimeout(final TimerTask task, final long delay, final TimeUnit unit);

	/**
	 * 停止定时任务调度器
	 *
	 * @return 在该定时任务管理器中创建的所有的超时对象
	 */
	Set<Timeout> stop();
}
